package cards;

/**
 * Interface for a card game
 * @author uni
 */
public interface CardGameIface {
    
    /**
     * Turn of the player on move; the player chooses one card and plays it
     * @param chosenCardIndex index of the card to be played
     * @return GameState state of the game after the turn
     */
    public GameState turn(int chosenCardIndex);
    
    /**
     * Draws card(s) from the playing deck
     * @param player player that draws
     * @param int number of cards to draw 
     */
    public void drawCards(Player player, int numberOfCards);
    
    /**
     * Get the last card played - the one that is lying on the top of
     * the discard pile
     * @return the last played card
     */
    public Card getLastPlayedCard();
    
    /**
     * Get present rank - rank the players are allowed to play
     * @return present rank
     */
    public Rank getPresentRank();
    
    /**
     * Get present suit - suit the players are allowed to play
     * @return present suit
     */
    public Suit getPresentSuit();
    
    /**
     * Set new present suit - suit the players are allowed to play
     * @param newSuit
     */
    public void setPresentSuit(Suit newSuit);
    
    /**
     * Get player that is on move
     * @return the playerOnMove
     */
    public Player getPlayerOnMove();
    
    /**
     * Get next player (player who plays after the player that is on move)
     * @return next player
     */
    public Player getNextPlayer();
    
    /**
     * Sets next player as the player on move
     */
    public void setNextPlayerOnMove();
    
}
